package com.sams.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.expression.spel.ast.Projection;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.github.pagehelper.PageInfo;
import com.sams.entity.DataTotal;
import com.sams.entity.DataUp;
import com.sams.entity.DepartList;
import com.sams.entity.School;
import com.sams.entity.User;
import com.sams.mapper.SchoolMapper;
import com.sams.service.BaseInfoService;
import com.sams.service.DataTotalService;
import com.sams.service.DataUpService;
import com.sams.service.SchoolService;
import com.sams.util.SamResult;

@RequestMapping("/dataup")
@Controller
public class DataUpController {
	@Autowired
	private DataUpService service;
 	@Autowired
	private SchoolMapper schoolMapper; 
	@Autowired
	private BaseInfoService baseInfoService;
	@Autowired
	private DataTotalService dataTotalService;
	@Autowired
	private SchoolService schoolService;
	/************************************************国家资助*********************************************/
	@RequestMapping("/listcountrysub")
	public String listCountrySub(Integer currentPage , 
			Integer schid ,String project,Integer status,Model model,Integer zid,String x,
			HttpServletRequest request,HttpSession session) {
		if(currentPage==null || currentPage==0) {
			currentPage=1;
		}
		User user =  (User)request.getSession().getAttribute("user");
		if(user==null) {
			model.addAttribute("error", "会话过期，请重新登录");
			return "error";
		}
 
				//查询所有的乡镇
				if(user.getRoleid()==1 ||user.getRoleid()==2) {
					 //查询所有镇id
					model.addAttribute("xzList", baseInfoService.findById(user.getZid()));
				}else { 
					 model.addAttribute("xzList", dataTotalService.selectAllZhen());
				}	
		
		 //按条件查询
		DataUp dataUp = new DataUp();
		if(x==null) {
			if(schid!=null && !schid.toString().equals("")) {
				dataUp.setSchid(schid);
			}
			if(project!=null && !project.equals("")) {
				dataUp.setProject(project);
			}
			if(zid!=null && !zid.equals("")) {
				dataUp.setZid(zid);
			}
		}else {// 说明是分页信息  从session中获取上一次的条件
			dataUp=(DataUp)session.getAttribute("dataUp");
		}
		
		//如果当前用户 ==1  查询当前自己的数据  且状态=1
		if(user.getRoleid()==1) {
			dataUp.setUid(user.getId());  // 状态为1 
			dataUp.setStatus(1);
		}else if(user.getRoleid()==2) {
			dataUp.setStatus(2);//状态=2  它下面所属学校（所属学校在下拉框里面控制  ）
			//如果没有查询条  则查询该镇的所有学校
			 List<Integer> scIds = new ArrayList<Integer>();
			if(dataUp.getSchid()==null) {
 				 List<School> scList = schoolMapper.selectSchoolByUid(user.getId());
				for(School sc : scList) {
					scIds.add(sc.getSchid());
				}
				dataUp.setSchidList(scIds);
			}
			DataUp dd = new DataUp();
			dd.setStatus(2);
			dd.setSchidList(scIds);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProject(dd);
			model.addAttribute("projectList",projectList);
			
		} else { // 3 县账号 和  4 系统管理员
			if(user.getRoleid()==3) {
				dataUp.setStatus(3);
			}
			//查询所有学校的  
			//按项目汇总
			DataUp dd = new DataUp();
			dd.setStatus(3);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProject(dd);
			model.addAttribute("projectList",projectList);
			
			 //根据镇id 也是查询所有学校
			 if(zid!=null &&  !zid.equals("")) {
				 List<Integer> scIds = new ArrayList<Integer>();
				 List<School> scList = schoolMapper.selectSchoolByZid(zid);
				 for(School sc : scList) {
					 scIds.add(sc.getSchid());
				 }
				 dataUp.setSchidList(scIds);
			 }
			
		}
		
		PageInfo<DataUp> pageInfo= service.selectCountrySub(currentPage, dataUp);
		System.out.println(pageInfo.getList());
		model.addAttribute("pageInfo",pageInfo);
		session.setAttribute("dataUp", dataUp);
		//如果已选zid ，则需要回显它对应的学校，方便继续选择其他学校
				if(zid!=null && !zid.equals("")) {
					model.addAttribute("schoolListByZid",schoolService.selectSchoolByZid(zid));
				}
		return "dataupCountrySub";
	}
	//upcountrysub   数据上报
	@ResponseBody
	@RequestMapping("/upcountrysub")
	public SamResult upcountrysub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.updateCountrySub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
			 if(status==3) { //即将变为4  归档
				 result.setMsg("数据归档成功，已归档"+count+"条数据,可在数据查询菜单中查看");
			 }else {
				 result.setMsg("上报成功，已上报领导"+count+"条数据");
			 }
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	//  数据上报撤销
	@ResponseBody
	@RequestMapping("/downcountrysub")
	public SamResult downcountrysub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.downdateCountrySub(dataUp);
		if(count>0) {
			 result.setData(count); //撤销上报的数据条数
			 result.setStatus(200);
		     result.setMsg("撤销数据成功，已撤销"+count+"条数据");
			 
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	
	
	/********************************地方政府******************************************/
	@RequestMapping("/listgovsub")
	public String listGovSub(Integer currentPage , 
			Integer schid ,String project,Integer status,Model model,Integer zid,String x,
			HttpServletRequest request,HttpSession session) {
		if(currentPage==null || currentPage==0) {
			currentPage=1;
		}
		User user =  (User)request.getSession().getAttribute("user");
		if(user==null) {
			model.addAttribute("error", "会话过期，请重新登录");
			return "error";
		}
		//查询所有的乡镇
		if(user.getRoleid()==1 ||user.getRoleid()==2) {
			 //查询所有镇id
			model.addAttribute("xzList", baseInfoService.findById(user.getZid()));
		}else { 
			 model.addAttribute("xzList", dataTotalService.selectAllZhen());
		}	

		 //按条件查询
		DataUp dataUp = new DataUp();
		if(x==null) {
			if(schid!=null && !schid.toString().equals("")) {
				dataUp.setSchid(schid);
			}
			if(project!=null && !project.equals("")) {
				dataUp.setProject(project);
			}
			if(zid!=null && !zid.equals("")) {
				dataUp.setZid(zid);
			}
		}else {// 说明是分页信息  从session中获取上一次的条件
			dataUp=(DataUp)session.getAttribute("dataUp");
		}
		
	 
		
		//如果当前用户 ==1  查询当前自己的数据  且状态=1
		if(user.getRoleid()==1) {
			dataUp.setUid(user.getId());  // 状态为1 
			dataUp.setStatus(1);
		}else if(user.getRoleid()==2) {
			dataUp.setStatus(2);//状态=2  它下面所属学校（所属学校在下拉框里面控制  ）
			 List<Integer> scIds = new ArrayList<Integer>();
			//如果没有查询条  则查询该镇的所有学校
			if(dataUp.getSchid()==null) {
				 List<School> scList = schoolMapper.selectSchoolByUid(user.getId());
				for(School sc : scList) {
					scIds.add(sc.getSchid());
				}
				dataUp.setSchidList(scIds);
			}
			DataUp dd = new DataUp();
			dd.setStatus(2);
			dd.setSchidList(scIds);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectGov(dd);
			model.addAttribute("projectList",projectList);
			
		} else { // 3 县账号 和  4 系统管理员
			if(user.getRoleid()==3) {
				dataUp.setStatus(3);
			}
			//查询所有学校的  
			//按项目汇总
			DataUp dd = new DataUp();
			dd.setStatus(3);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectGov(dd);
			model.addAttribute("projectList",projectList);
			
			 //根据镇id 也是查询所有学校
			 if(zid!=null &&  !zid.equals("")) {
				 List<Integer> scIds = new ArrayList<Integer>();
				 List<School> scList = schoolMapper.selectSchoolByZid(zid);
				 for(School sc : scList) {
					 scIds.add(sc.getSchid());
				 }
				 dataUp.setSchidList(scIds);
			 }
			
		}

		
		PageInfo<DataUp> pageInfo= service.selectGovSub(currentPage, dataUp);
		System.out.println(pageInfo.getList());
		model.addAttribute("pageInfo",pageInfo);

		session.setAttribute("dataUp", dataUp);
		//如果已选zid ，则需要回显它对应的学校，方便继续选择其他学校
				if(zid!=null && !zid.equals("")) {
					model.addAttribute("schoolListByZid",schoolService.selectSchoolByZid(zid));
				}
		 
		return "dataupGovSub";
	}
	//upgovsub
	@ResponseBody
	@RequestMapping("/upgovsub")
	public SamResult upgovsub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.updateGovSub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
			 if(status==3) { //即将变为4  归档
				 result.setMsg("数据归档成功，已归档"+count+"条数据,可在数据查询菜单中查看");
			 }else {
				 result.setMsg("上报成功，已上报领导"+count+"条数据");
			 }
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	@ResponseBody
	@RequestMapping("/downgovsub")
	public SamResult downgovsub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.downdateGovSub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
			 
			 result.setMsg("撤销数据成功，已撤销"+count+"条数据");
			 
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	
	

	@RequestMapping("/listschoolsub")
	public String listSchoolSub(Integer currentPage , 
			Integer schid ,String project,Integer status,Model model,Integer zid,String x,
			HttpServletRequest request,HttpSession session) {
		if(currentPage==null || currentPage==0) {
			currentPage=1;
		}
		User user =  (User)request.getSession().getAttribute("user");
		if(user==null) {
			model.addAttribute("error", "会话过期，请重新登录");
			return "error";
		}
		//查询所有的乡镇
		if(user.getRoleid()==1 ||user.getRoleid()==2) {
			 //查询所有镇id
			model.addAttribute("xzList", baseInfoService.findById(user.getZid()));
		}else { 
			 model.addAttribute("xzList", dataTotalService.selectAllZhen());
		}	
		

		 //按条件查询
		DataUp dataUp = new DataUp();
		if(x==null) {
			if(schid!=null && !schid.toString().equals("")) {
				dataUp.setSchid(schid);
			}
			if(project!=null && !project.equals("")) {
				dataUp.setProject(project);
			}
			if(zid!=null && !zid.equals("")) {
				dataUp.setZid(zid);
			}
		}else {// 说明是分页信息  从session中获取上一次的条件
			dataUp=(DataUp)session.getAttribute("dataUp");
		}
		//如果当前用户 ==1  查询当前自己的数据  且状态=1
		if(user.getRoleid()==1) {
			dataUp.setUid(user.getId());  // 状态为1 
			dataUp.setStatus(1);
		}else if(user.getRoleid()==2) {
			dataUp.setStatus(2);//状态=2  它下面所属学校（所属学校在下拉框里面控制  ）
			 List<Integer> scIds = new ArrayList<Integer>();
			//如果没有查询条  则查询该镇的所有学校
			if(dataUp.getSchid()==null) {
				 List<School> scList = schoolMapper.selectSchoolByUid(user.getId());
				for(School sc : scList) {
					scIds.add(sc.getSchid());
				}
				dataUp.setSchidList(scIds);
			}
			DataUp dd = new DataUp();
			dd.setStatus(2);
			dd.setSchidList(scIds);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectSchool(dd);
			model.addAttribute("projectList",projectList);
			
		}else { // 3 县账号 和  4 系统管理员
			if(user.getRoleid()==3) {
				dataUp.setStatus(3);
			}
			//查询所有学校的  
			//按项目汇总
			DataUp dd = new DataUp();
			dd.setStatus(3);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectSchool(dd);
			model.addAttribute("projectList",projectList);
			
			 //根据镇id 也是查询所有学校
			 if(zid!=null &&  !zid.equals("")) {
				 List<Integer> scIds = new ArrayList<Integer>();
				 List<School> scList = schoolMapper.selectSchoolByZid(zid);
				 for(School sc : scList) {
					 scIds.add(sc.getSchid());
				 }
				 dataUp.setSchidList(scIds);
			 }
			
		}

	
		PageInfo<DataUp> pageInfo= service.selectSchoolSub(currentPage, dataUp);
		System.out.println(pageInfo.getList());
		model.addAttribute("pageInfo",pageInfo);
		session.setAttribute("dataUp", dataUp);
		//如果已选zid ，则需要回显它对应的学校，方便继续选择其他学校
			if(zid!=null && !zid.equals("")) {
				model.addAttribute("schoolListByZid",schoolService.selectSchoolByZid(zid));
			}
		
		 
		return "dataupSchoolSub";
	}
	//upgovsub
	@ResponseBody
	@RequestMapping("/upschoolsub")
	public SamResult upschoolsub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.updateSchoolSub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
			 if(status==3) { //即将变为4  归档
				 result.setMsg("数据归档成功，已归档"+count+"条数据,可在数据查询菜单中查看");
			 }else {
				 result.setMsg("上报成功，已上报领导"+count+"条数据");
			 }
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	
	@ResponseBody
	@RequestMapping("/downschoolsub")
	public SamResult downschoolsub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.downdateSchoolSub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
		 
			 result.setMsg("撤销成功，已撤销数据"+count+"条数据");
			 
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	
	
	@RequestMapping("/listsocietysub")
	public String listSocietySub(Integer currentPage , 
			Integer schid ,String project,Integer status,Model model,Integer zid,String x,
			HttpServletRequest request,HttpSession session) {
		if(currentPage==null || currentPage==0) {
			currentPage=1;
		}
		User user =  (User)request.getSession().getAttribute("user");
		if(user==null) {
			model.addAttribute("error", "会话过期，请重新登录");
			return "error";
		}
		//查询所有的乡镇
		if(user.getRoleid()==1 ||user.getRoleid()==2) {
			 //查询所有镇id
			model.addAttribute("xzList", baseInfoService.findById(user.getZid()));
		}else { 
			 model.addAttribute("xzList", dataTotalService.selectAllZhen());
		}
		
		 //按条件查询
		DataUp dataUp = new DataUp();
		if(x==null) {
			if(schid!=null && !schid.toString().equals("")) {
				dataUp.setSchid(schid);
			}
			if(project!=null && !project.equals("")) {
				dataUp.setProject(project);
			}
			if(zid!=null && !zid.equals("")) {
				dataUp.setZid(zid);
			}
		}else {// 说明是分页信息  从session中获取上一次的条件
			dataUp=(DataUp)session.getAttribute("dataUp");
		}
		
		//如果当前用户 ==1  查询当前自己的数据  且状态=1
		if(user.getRoleid()==1) {
			dataUp.setUid(user.getId());  // 状态为1 
			dataUp.setStatus(1);
		}else if(user.getRoleid()==2) {
			dataUp.setStatus(2);//状态=2  它下面所属学校（所属学校在下拉框里面控制  ）
			//如果没有查询条  则查询该镇的所有学校
			 List<Integer> scIds = new ArrayList<Integer>();
			if(dataUp.getSchid()==null) {
				 List<School> scList = schoolMapper.selectSchoolByUid(user.getId());
				for(School sc : scList) {
					scIds.add(sc.getSchid());
				}
				dataUp.setSchidList(scIds);
			}
			DataUp dd = new DataUp();
			dd.setStatus(2);
			dd.setSchidList(scIds);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectSociety(dd);
			model.addAttribute("projectList",projectList);
			
		}else { // 3 县账号 和  4 系统管理员
			if(user.getRoleid()==3) {
				dataUp.setStatus(3);
			}
			//查询所有学校的  
			//按项目汇总
			DataUp dd = new DataUp();
			dd.setStatus(3);
			//按项目汇总
			List<DataUp> projectList = service.getTotalByProjectSociety(dd);
			model.addAttribute("projectList",projectList);
			
			 //根据镇id 也是查询所有学校
			 if(zid!=null &&  !zid.equals("")) {
				 List<Integer> scIds = new ArrayList<Integer>();
				 List<School> scList = schoolMapper.selectSchoolByZid(zid);
				 for(School sc : scList) {
					 scIds.add(sc.getSchid());
				 }
				 dataUp.setSchidList(scIds);
			 }
			
		}

		
		PageInfo<DataUp> pageInfo= service.selectSocietySub(currentPage, dataUp);
		System.out.println(pageInfo.getList());
		model.addAttribute("pageInfo",pageInfo);
		session.setAttribute("dataUp", dataUp);
		//如果已选zid ，则需要回显它对应的学校，方便继续选择其他学校
				if(zid!=null && !zid.equals("")) {
					model.addAttribute("schoolListByZid",schoolService.selectSchoolByZid(zid));
				} 
		return "dataupSocietySub";
	}
	//upgovsub
	@ResponseBody
	@RequestMapping("/upsocietysub")
	public SamResult upsocietysub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.updateSocietySub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
			 if(status==3) { //即将变为4  归档
				 result.setMsg("数据归档成功，已归档"+count+"条数据,可在数据查询菜单中查看");
			 }else {
				 result.setMsg("上报成功，已上报领导"+count+"条数据");
			 }
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	@ResponseBody
	@RequestMapping("/downsocietysub")
	public SamResult downsocietysub(Integer schid ,String project,Integer status,Model model) {
		DataUp dataUp = new DataUp();
		if(schid!=null && !schid.toString().equals("")) {
			dataUp.setSchid(schid);
		}
		if(project!=null && !project.equals("")) {
			dataUp.setProject(project);
		}
		if(status!=null && !status.toString().equals("")) {
			dataUp.setStatus(status);
		}
		SamResult result = new SamResult();
		int count =service.downdateSocietySub(dataUp);
		if(count>0) {
			 result.setData(count); //上报的数据条数
			 result.setStatus(200);
		 
			 result.setMsg("撤销数据成功，已撤销"+count+"条数据");
			
		}else {
			 
			 result.setData(count); //上报的数据条数
			 result.setStatus(-1);
			 result.setMsg("数据上报失败");
		}
		return result;
	}
	
}
